package com.sh.stream流;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Auther: sh
 * @Version 1.0
 * @Description:
 */
public class Main {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alex", "Brian", "Charles", "David", "David", "Eleanor");
        // 1、过滤字符串长度大于4的元素
//        List<String> collect = names.stream().filter(item -> item.length() > 4).collect(Collectors.toList());
//        System.out.println(collect);
        //  2、map()方法可将一个流的元素转换为另一个流。它接受一个函数，该函数映射流中的每个元素到另一个元素。
//        names.stream().map(item -> {
//            item = "xxx" + item;
//            return item;
//        }).collect(Collectors.toList()).forEach(System.out::println);
//        Map<String, String> collect = names.stream().collect(
//                Collectors.toMap(item -> item + "",
//                        item -> item + "ssss",
//                        (val1, val2) -> val2));
//        collect.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
//      3、distinct()方法从流中返回所有不同的元素。在内部，它使用equals()方法来比较元素是否相同。
//         因此，我们需要确保equals()方法已正确实现
//        names.stream().distinct().collect(Collectors.toList()).forEach(System.out::println);
        // 4、limit()方法限制流中的元素数量。它接受一个整数参数，表示要返回的元素的最大数目。
//        names.stream().limit(3).collect(Collectors.toList()).forEach(System.out::println);
//      5、Skip(跳过)
        names.stream().skip(1).collect(Collectors.toList()).forEach(System.out::println);
//       6、 peek()方法可以用于在Stream流中获取元素同时执行一些操作，如打印、调试、观察等。通常会与其他的方法联合使用。
        List<String> filteredNames = names.stream()
                .peek(System.out::println)
                .filter(name -> name.startsWith("C"))
                .peek(name -> System.out.println("Filtered value: " + name))
                .collect(Collectors.toList());
//      7、 forEach()方法可将给定的方法应用于流中的每个元素。该方法是一种消费流的方式，不会返回值。
        names.stream().forEach(System.out::println);
//      8、collect()方法可以将流中的元素收集到一个集合中。一般与其他方法配合使用。
        List<String> c = names.stream().filter(item -> item.startsWith("C")).collect(Collectors.toList());
//      9、 count()方法可以返回流中的元素数。
        long count = names.stream().count();
//      10、anyMatch()方法如果至少有一个元素与给定的谓词匹配，则返回true。
        boolean anyStartsWithB = names.stream().anyMatch(name -> name.startsWith("B"));
//      11、allMatch()方法如果所有元素都与给定谓词匹配，则返回true。
        boolean allStartsWithB = names.stream().allMatch(name -> name.startsWith("B"));
//      12、noneMatch()方法，如果没有任何元素与给定谓词匹配，则返回true
        boolean noneStartsWithB = names.stream().noneMatch(name -> name.startsWith("E"));
    }
}




